package com.atguigu.tingshu.album.service;

import com.atguigu.tingshu.model.album.TrackInfo;
import com.atguigu.tingshu.query.album.TrackInfoQuery;
import com.atguigu.tingshu.vo.album.AlbumTrackListVo;
import com.atguigu.tingshu.vo.album.TrackInfoVo;
import com.atguigu.tingshu.vo.album.TrackListVo;
import com.atguigu.tingshu.vo.album.TrackStatMqVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

public interface TrackInfoService extends IService<TrackInfo> {

    /**
     * @author WeakMoon
     * @date 2025/02/22 15:50:27
     * 上传声音
     */
    Map<String, Object> uploadTrack(MultipartFile file);

    /**
     * @author WeakMoon
     * @date 2025/02/22 17:14:37
     * 保存声音
     */
    void saveTrackInfo(TrackInfoVo trackInfoVo, Long userId);

    /**
     * @author WeakMoon
     * @date 2025/02/23 14:11:48
     * 根据用户Id，状态等条件查询声音列表
     */
    IPage<TrackListVo> findUserTrackPage(Page<TrackListVo> trackListVoPage, TrackInfoQuery trackInfoQuery);

    /**
     * @author WeakMoon
     * @date 2025/02/23 15:31:18
     * 根据声音id，删除声音对象
     */
    void removeTrackInfo(Long trackId);

    /**
     * @author WeakMoon
     * @date 2025/02/23 18:07:19
     * 修改声音信息
     */
    void updateTrackInfo(Long trackId, TrackInfoVo trackInfoVo);

    /**
     * @author WeakMoon
     * @date 2025/03/03 16:17:37
     * 根据专辑id获取声音列表
     */
    IPage<AlbumTrackListVo> findAlbumTrackPage(Page<AlbumTrackListVo> trackListVoPage, Long albumId, Long userId);

    /**
     * @author WeakMoon
     * @date 2025/03/04 20:09:22
     * 修改声音统计
     */
    void updateTrackStat(TrackStatMqVo trackStatMqVo);

    /**
     * @author WeakMoon
     * @date 2025/03/08 16:16:22
     * 声音分集列表
     */
    List<Map<String, Object>> findUserTrackPaidList(Long trackId, Long userId);

    /**
     * @author WeakMoon
     * @date 2025/03/09 16:07:42
     * 批量获取下单付费声音列表
     */
    List<TrackInfo> findPaidTrackInfoList(Long trackId, Integer trackCount, Long userId);
}
